package com.medusa.aps.business.global.model.o;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

/**
 * @author 张治保
 * @since 2023/11/10
 */
@Getter
@Setter
@ToString
@Accessors(chain = true)
public class RangeDate implements Serializable {

    /**
     * 开始日期
     */
    private LocalDate start;

    /**
     * 结束日期
     */
    private LocalDate end;

    /**
     * 开始时间
     *
     * @ignore
     */
    private LocalDateTime startTime;

    /**
     * 结束时间
     *
     * @ignore
     */
    private LocalDateTime endTime;

    /**
     * 开始时间
     *
     * @return 开始时间
     */
    public RangeDate setStart(LocalDate start) {
        this.start = start;
        return this.setStartTime(start == null ? null : start.atStartOfDay());
    }

    /**
     * 结束时间
     *
     * @return 结束时间
     */
    public RangeDate setEnd(LocalDate end) {
        this.end = end;
        return this.setEndTime(end == null ? null : end.atTime(LocalTime.MAX));
    }

    /**
     * 开始时间结束时间转换成时间段
     *
     * @return 时间段
     */
    public Duration toDuration() {
        if (startTime == null || endTime == null) {
            return null;
        }
        return Duration.between(startTime, endTime);

    }
}
